/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package escom.ipn.Operador;

import escom.ipn.Despacho.cambiarEstadoIncidente;
import escom.ipn.modelo.delegate.*;
import escom.ipn.modelo.dto.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Daniel
 */
public class levantarIncidente extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /*
             * TODO output your page here. You may use following sample code.
             */
           
           //inicializacion 
           String html, msg;
           request.setCharacterEncoding("UTF-8");
           
           // INICIO inicializaciones
           java.util.Date utilDate = new java.util.Date();
           java.sql.Timestamp fecha = new java.sql.Timestamp(utilDate.getTime());
           
           HttpSession sess = request.getSession(true);
           
           cooerdenadaIncidenteDelegate del = new cooerdenadaIncidenteDelegate();
           coordenadaIncidenteClass a = new coordenadaIncidenteClass();
           
           IncidenteClass ai = new IncidenteClass();
           IncidenteDelegate deli = new IncidenteDelegate();
           IncidenteDelegate deli2 = new IncidenteDelegate();
           
           catalogoIncidenteDelegate cid = new catalogoIncidenteDelegate();
           catalogoIncidenteClass ci = new catalogoIncidenteClass();
           
           UsuarioIncidente ui = new UsuarioIncidente();
           UsuarioIncidenteDelegate uid =new UsuarioIncidenteDelegate();
           UsuarioIncidenteDelegate uid2 =new UsuarioIncidenteDelegate();
           
           UsuarioDelegate ud =new UsuarioDelegate();
           UsuarioDelegate ud2 = new UsuarioDelegate();
           Usuario uc = new Usuario();
           // FIN inicializaciones
           
           //INICIO Conseguir id del tipo de incidente
           ci.setIncidente(request.getParameter("tipoIncidente"));
           try {
                ci = cid.mostrarIdCatalogoIncidente(ci);
                msg=" ";
            } catch (SQLException ex) {out.println(ex.toString());
                msg="Fracaso id Tipo de incidente";
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
           //FIN Conseguir id del tipo de incidente
           
           //INICIO levantar incidente
           sess.setAttribute("idTipoIncidente", ci.getId());
           ai.setCAT_TIPO_INCIDENTE_id_tipo_incidente(Integer.parseInt(ci.getId()));
           ai.setFecha(fecha);
           ai.setSECTOR_id_sector(Integer.parseInt(sess.getAttribute("sector").toString()));
           ai.setCAT_ESTADOS_INCIDENTE__id_estado_incidente(1);
           ai.setLugar(request.getParameter("address"));
           //FIN levantar incidente
           
            try {
                deli.crear(ai);
            } catch (SQLException ex) {out.println(ex.toString());
                msg +="Fracaso levantar incidente";
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            //INICIO consigue el id del incidente recienlevantado
            try {
                ai =deli2.mostrarIncidentes(ai);
            } catch (SQLException ex){out.println(ex.toString());
                msg += "Fracaso conseguir id del incidente";
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
            // FIN consigue el id del incidente recienlevantado
            
            // INICIO Guarda la cordenadas del incidente
            sess.setAttribute("idIncidente", ai.getId_incidente());
            a.setId(Integer.toString(ai.getId_incidente()));
            a.setLatitude(request.getParameter("latitude"));
            a.setLongitude(request.getParameter("longitude"));
            sess.setAttribute("latitud",request.getParameter("latitude"));
            sess.setAttribute("longitud",request.getParameter("longitude"));
            
            try {
                del.crear(a);
            } catch (SQLException ex) {out.println(ex.toString());
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
            // FIN Guarda la cordenadas del incidente         
            
            // INICIO seleccionar  despachador libre o menos ocupado
            try {
                uc = ud.mostrarDespachadorLibre(Integer.parseInt(sess.getAttribute("sector").toString()));
            } catch (SQLException ex) {out.println(ex.toString());
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
            if(uc==null){
                try {
                    uc = ud2.mostrarDespachadorMenosOcupado(Integer.parseInt(sess.getAttribute("sector").toString()));
                } catch (SQLException ex) {out.println(ex.toString());
                    Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            // FIN seleccionar  despachador libre o menos ocupado
            
            
            //INICIO guarda la relacion incidente operador y despachador
            ui.setIncidenteId(ai.getId_incidente());
            ui.setUsuarioId(Integer.parseInt(sess.getAttribute("id_Usuario").toString()));
            try {
                uid.crear(ui);
            } catch (SQLException ex) {out.println(ex.toString());
                msg += " Fracaso incidente operador";
                Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
            }
            if(uc!=null){
                ui.setIncidenteId(ai.getId_incidente());
                ui.setUsuarioId(Integer.parseInt(uc.getId()));
                try {
                    uid2.crear(ui);
                } catch (SQLException ex) {out.println(ex.toString());
                    msg += " Fracaso incidente despachador";
                    Logger.getLogger(levantarIncidente.class.getName()).log(Level.SEVERE, null, ex);
                }
            }           
            //FIN guarda la relacion incidente operador y despachador
            
            //INICIO PRE-ALERTA
            //PATRULLA MAS CERCANA
            Carro_Radio_Patrulla crp = new Carro_Radio_Patrulla();
            Carro_Radio_PatrullaDelegate crpd = new Carro_Radio_PatrullaDelegate();
            List CarrosLibres = crpd.mostraroliciasLibre(Integer.parseInt(sess.getAttribute("idIncidente").toString()));
            if(CarrosLibres!=null){
                crp = (Carro_Radio_Patrulla) CarrosLibres.get(0);
            
                //ASIGNAR RECURSO
                Incidente_Radios ir = new Incidente_Radios();
                Incidente_RadiosDelegate ird = new Incidente_RadiosDelegate();
                Radio_Comunicacion rc = new Radio_Comunicacion();
                Radio_ComunicacionDelegate rcd = new Radio_ComunicacionDelegate();
                Radio_ComunicacionDelegate rcd2 = new Radio_ComunicacionDelegate();
                rc.setId_radio_comunicacion(crp.getRADIO_COMUNICACION_id_radio());
                    rc = rcd2.mostrarRadioId(rc);
                    if(rc.getCAT_ESTADO_RECURSO_id_estado_recurso()==1){
                        ir.setINCIDENTE_id_incidente(ai.getId_incidente());
                        ir.setRADIO_COMUNICACION_id_radio(crp.getRADIO_COMUNICACION_id_radio());
                        rc.setId_radio_comunicacion(crp.getRADIO_COMUNICACION_id_radio());
                        rc.setCAT_ESTADO_RECURSO_id_estado_recurso(2);

                        ird.crear(ir);
                        rcd.modificarEstado(rc);
                    }
                //CAMBIO DE ESTADO DE INCIDENTE
                IncidenteClass incidente =new IncidenteClass();
                IncidenteDelegate delincidente = new IncidenteDelegate();

                incidente.setId_incidente(ai.getId_incidente());
                incidente.setCAT_ESTADOS_INCIDENTE__id_estado_incidente(2);
                    delincidente.modificarEstado(incidente);
            }
            
            
            //FIN PRE-ALERTA
            html = "<div>";           
            html += msg;
            html += "<p> ID de levantamiento " + a.getId() +"</p>";
//            html +="<p><input type=\"button\" "
//                    + "class=\"button medium blue\"  "
//                    + "value=\"Siguiente\"  "
//                    + "onclick=\"Pregunta("+ci.getId()+")\"/></p>";
            html +="</div>";
            
            html +="<div id=\"respuesta2\">";
            html +="<p><input type=\"button\" "
                    + "class=\"button medium black\"  "
                    + "value=\"Preguntas\"  "
                    + "onclick=\"Pregunta("+ci.getId()+")\"/></p>";
            
            html+= "</div>";
            html +="<div id=\"respuestas\"></div>";
            
            response.setContentType("text/html");
            out = response.getWriter();
            out.println(html);
            
        } catch(Exception ex){out.println(ex.toString());}
        finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
